package task

import (
	"5title_gin/global"
	"5title_gin/internal/model/user"
	"5title_gin/pkg/cache"
	"5title_gin/pkg/utils/sys/userUtils"
	"time"

	"go.uber.org/zap"
)

// StartUserStatusChecker 启动用户状态检查器
func StartUserStatusChecker() {
	// 打印启动成功信息
	zap.S().Info("🕒 用户状态检查器启动成功！系统将每15分钟检查一次不活跃用户")
	go func() {
		ticker := time.NewTicker(15 * time.Minute) // 每15分钟检查一次
		defer ticker.Stop()

		for range ticker.C {
			updateInactiveUsers()
		}
	}()
}

// updateInactiveUsers 更新不活跃用户的状态
func updateInactiveUsers() {
	var users []user.UserModel

	// 获取所有在线状态的用户
	if err := global.DB.Where("status = ?", 1).Find(&users).Error; err != nil {
		zap.S().Errorf("获取在线用户失败: %v", err)
		return
	}

	for _, u := range users {
		// 检查用户是否活跃
		if !cache.IsUserActive(u.ID) {
			// 用户不活跃，更新为离线状态
			if err := userUtils.UpdateUserStatus(u.ID, 2); err != nil {
				zap.S().Errorf("更新用户 %d 状态为离线失败: %v", u.ID, err)
			} else {
				zap.S().Infof("用户 %d 已设置为离线状态", u.ID)
			}
		}
	}
}
